package com.lzy.chat.c_service;

import com.lzy.chat.a_entity.AddGroup;
import com.lzy.chat.a_entity.Group;
import com.lzy.chat.a_entity.GroupShip;

import java.util.Date;
import java.util.List;

public interface GroupService {

    /**
     * 插入群
     *
     * @param group 群对象
     */
    void createGroup(Group group, Integer uid);

    /**
     * 插入群关系
     *
     * @param uid_add    要添加的用户id
     * @param uid_permit 请求添加的用户id
     * @param gid        群id
     */
    void addGroupShip(Integer uid_add, Integer uid_permit, Integer gid);

    /**
     * 根据gid获取所有关系
     *
     * @param gid 群id
     * @return 关系list
     */
    List<GroupShip> getGroupShipByGid(Integer gid);

    /**
     * 根据uid获取所有关系
     *
     * @param uid 用户id
     * @return 关系list
     */
    List<GroupShip> getGroupShipByUid(Integer uid);

    GroupShip getGroupShipByUidAndGid(Integer uid, Integer gid);

    /**
     * 删除群
     *
     * @param gid 群id
     */
    void dismissGroup(Integer gid, Integer uid);

    /**
     * 删除群关系
     *
     * @param gid 群id
     * @param uid 用户id
     */
    void deleteGroupShip(Integer gid, Integer uid);

    /**
     * 通过关键字检索群
     *
     * @param keyword 关键字
     * @return 群list
     */
    List<Group> getGroupByName(String keyword);

    /**
     * 通过群id检索
     *
     * @param gid 群id
     * @return 群
     */
    Group getGroupByGid(Integer gid);

    /**
     * 更新群信息
     *
     * @param group 群
     */
    void updateGroupInfo(Group group);

    /**
     * 更新最新阅读时间
     *
     * @param uid  用户id
     * @param gid  群id
     * @param date 时间
     */
    void updateLastReadDate(Integer uid, Integer gid, Date date);

    /**
     * 向addGroup添加申请
     *
     * @param addGroup 申请
     */
    void requestToAddGroup(AddGroup addGroup);

    /**
     * 处理群申请
     *
     * @param id   申请id
     * @param deal 处理 1 or 2
     */
    void dealAddGroup(Integer id, Integer deal);

    /**
     * 计算gid群有多少个未处理申请
     *
     * @param gid 群id
     * @return 未处理申请个数
     */
    Integer countUnDeal(Integer gid);

    /**
     * 获取一个群的所有请求
     *
     * @param gid 群id
     * @return 所有未处理请求
     */
    List<AddGroup> getUnDealByGid(Integer gid);

    List<Integer> getOnesManageGroup(Integer uid);

    List<Integer> getOnesGroup(Integer uid);

    List<Integer> getGroupManager(Integer gid);
}
